<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <input type="text" id="opt">
    <p id="op"></p>
    <script>
        let obj = {} //看作是vue中的data
        let val = '初始值'

        // 相当于第三方
        Object.defineProperty(obj, 'txtval', {
            get() {
                return val
            },
            set(newVal) {
                // 修改界面， 修改成用户输入的信息
                opt.value = newVal
                op.innerText = newVal
            }
        })

        //订阅者 页面元素
        opt.value = obj.txtval
        op.innerText = obj.txtval

        opt.addEventListener('input', e => {
            // 用户输入数据
            // 发布者
            obj.txtval = e.target.value
        })
    </script>
</body>

</html>